/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package ejb; import Exceptions.ExceptionInterceptor; import Facades.JoueurFacadeLocal; import Facades.PieceFacadeLocal; import Facades.PlateauFacadeLocal; import Others.EchiquierE; import ant.Joueur; import ant.Piece; import ant.Plateau; import ant.Roi; import java.awt.Color; import java.awt.Point; import java.util.ArrayList; import java.util.Collection; import java.util.List; import javax.ejb.EJB; import javax.ejb.Stateful; import javax.interceptor.Interceptors; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.PersistenceContext; import javax.persistence.PersistenceUnit; /** * * @author Greenlamp */ @Stateful public class SessionBean implements SessionBeanRemote { @EJB private PieceFacadeLocal pieceFacade; @EJB private JoueurFacadeLocal joueurFacade; @EJB private PlateauFacadeLocal plateauFacade; @PersistenceUnit EntityManagerFactory factory; @PersistenceContext EntityManager entityManager; /**********************************************************************/ /*Plateau*/ /**********************************************************************/ @Override @Interceptors(ExceptionInterceptor.class) public List<Plateau> getPlateaux() throws Exception{ return plateauFacade.findAll(); } @Override @Interceptors(ExceptionInterceptor.class) public void createPlateau(String nom) throws Exception{ Plateau plateau = new Plateau(); plateau.init(nom); plateauFacade.create(plateau); } @Override @Interceptors(ExceptionInterceptor.class) public Plateau getPlateauByNom(String nom) throws Exception{ return plateauFacade.getByNom(nom); } @Override @Interceptors(ExceptionInterceptor.class) public Joueur rejoindrePartie(String nomPlateau) throws Exception{ Plateau plateau = plateauFacade.getByNom(nomPlateau); if(plateau.getJoueur1() == null && plateau.getJoueur2() == null){ Joueur joueur = new Joueur(Color.WHITE); joueurFacade.create(joueur); plateau.setJoueur1(joueur); plateauFacade.edit(plateau); return joueur; } if(plateau.getJoueur1() != null && plateau.getJoueur2() == null){ Joueur joueur = new Joueur(Color.BLACK); joueurFacade.create(joueur); plateau.setJoueur2(joueur); plateauFacade.edit(plateau); return joueur; } return null; } @Override @Interceptors(ExceptionInterceptor.class) public List<Piece> getPieceByPlateau(String nomPlateau) throws Exception{ Plateau plateau = plateauFacade.getByNom(nomPlateau); Collection<Piece> listePiece; listePiece = plateau.getListePiece(); return new ArrayList<Piece>(listePiece); } @Override public void deletePlateau(String nomPlateau) throws Exception{ Plateau plateau = plateauFacade.getByNom(nomPlateau); plateauFacade.remove(plateau); } /**********************************************************************/ /*Piece*/ /**********************************************************************/ @Override public Piece getPieceAt(String nomPlateau, int posX, int posY) throws Exception{ Plateau plateau = plateauFacade.getByNom(nomPlateau); if(plateau == null){ return null; } Piece piece = plateau.getPiece(posX, posY); return piece; } @Override public List<Point> getDeplacementPossible(String nomPlateau, int posX, int posY) throws Exception{ Plateau plateau = plateauFacade.getByNom(nomPlateau); if(plateau == null){ return new ArrayList<Point>(); } Piece selectedPiece = plateau.getPiece(posX, posY); if(selectedPiece == null){ return new ArrayList<Point>(); } Collection<Piece> listePiece = plateau.getListePiece(); EchiquierE[][] cases = new EchiquierE[8][8]; for(int x = 0; x < 8; x++){ for(int y = 0; y < 8; y++){ cases[x][y] = new EchiquierE(); } } for(Piece piece : listePiece){ cases[piece.getPosX()][piece.getPosY()].setPiece(piece); } return selectedPiece.getDeplacementPossible(cases); } @Override public boolean bougerPion(String nomPlateau, int oldX, int oldY, int newX, int newY) throws Exception{ Plateau plateau = plateauFacade.getByNom(nomPlateau); if(plateau == null){ return false; } List<Point> listePoints = getDeplacementPossible(nomPlateau, oldX, oldY); boolean autoriser = false; for(Point point : listePoints){ if(point.getX() == newX && point.getY() == newY){ autoriser = true; break; } } //Deplacement non autorisé if(!autoriser){ return false; } //On se déplace sur une case avec déja une piece. Piece newPiece = plateau.getPiece(newX, newY); String nom = null; if(newPiece != null){ nom = newPiece.getNom(); plateau.removePiece(newX, newY); plateauFacade.edit(plateau); pieceFacade.remove(newPiece); } //On se déplace normalement Piece piece = plateau.getPiece(oldX, oldY); piece.setPosX(newX); piece.setPosY(newY); pieceFacade.edit(piece); return true; } /**********************************************************************/ /*Joueur*/ /**********************************************************************/ @Override @Interceptors(ExceptionInterceptor.class) public Long getIdJoueur(String nomPlateau, Color color) throws Exception{ Plateau plateau = plateauFacade.getByNom(nomPlateau); Joueur joueur = plateau.getJoueurByCouleur(color); return joueur.getId(); } @Override @Interceptors(ExceptionInterceptor.class) public void quitterPartie(String nomPlateau, Color color) throws Exception{ Plateau plateau = plateauFacade.getByNom(nomPlateau); if(plateau != null){ for(Piece piece : plateau.getListePiece()){ pieceFacade.remove(piece); } plateau.clearPiece(); plateauFacade.edit(plateau); Joueur joueur = plateau.quitterPlateau(color); if(joueur != null){ joueurFacade.remove(joueur); } plateauFacade.edit(plateau); int nombreDeJoueurs = plateau.getNombreDeJoueurs(); if(nombreDeJoueurs == 0){ deletePlateau(nomPlateau); } } } public boolean onEchec(String nomPlateau, Color color) throws Exception{ boolean retour = false; Plateau plateau = plateauFacade.getByNom(nomPlateau); if(plateau == null) return false; System.err.println("plateau ok"); Collection<Piece> listePiece = plateau.getListePiece(); EchiquierE[][] cases = new EchiquierE[8][8]; for(int x = 0; x < 8; x++){ for(int y = 0; y < 8; y++){ cases[x][y] = new EchiquierE(); } } for(Piece piece : listePiece){ cases[piece.getPosX()][piece.getPosY()].setPiece(piece); } System.err.println("init case ok"); for(Piece piece : plateau.getListePiece()){ if(piece.getNom().equalsIgnoreCase("Roi") && piece.getColor().getRGB() == color.getRGB()){ System.err.println("on a trouvé le roi"); Roi roi = (Roi)piece; retour = roi.isOnEchec(cases, color); } } return retour; } public boolean onEchecEtMat(String nomPlateau, Color color) throws Exception{ boolean retour = false; Plateau plateau = plateauFacade.getByNom(nomPlateau); if(plateau == null) return false; Collection<Piece> listePiece = plateau.getListePiece(); EchiquierE[][] cases = new EchiquierE[8][8]; for(int x = 0; x < 8; x++){ for(int y = 0; y < 8; y++){ cases[x][y] = new EchiquierE(); } } for(Piece piece : listePiece){ cases[piece.getPosX()][piece.getPosY()].setPiece(piece); } for(Piece piece : plateau.getListePiece()){ if(piece.getNom().equalsIgnoreCase("Roi") && piece.getColor().getRGB() == color.getRGB()){ System.err.println("on a trouvé le roi"); Roi roi = (Roi)piece; Roi roiTemp = new Roi(roi.getPosX()-1, roi.getPosY()-1, roi.getColor()); if(roiTemp.isOnEchecEtMat(cases, color)){ roiTemp = new Roi(roi.getPosX(), roi.getPosY()-1, roi.getColor()); if(roiTemp.isOnEchecEtMat(cases, color)){ roiTemp = new Roi(roi.getPosX()+1, roi.getPosY()-1, roi.getColor()); if(roiTemp.isOnEchecEtMat(cases, color)){ roiTemp = new Roi(roi.getPosX()-1, roi.getPosY(), roi.getColor()); if(roiTemp.isOnEchecEtMat(cases, color)){ roiTemp = new Roi(roi.getPosX(), roi.getPosY(), roi.getColor()); if(roiTemp.isOnEchecEtMat(cases, color)){ roiTemp = new Roi(roi.getPosX()+1, roi.getPosY(), roi.getColor()); if(roiTemp.isOnEchecEtMat(cases, color)){ roiTemp = new Roi(roi.getPosX()-1, roi.getPosY()+1, roi.getColor()); if(roiTemp.isOnEchecEtMat(cases, color)){ roiTemp = new Roi(roi.getPosX(), roi.getPosY()+1, roi.getColor()); if(roiTemp.isOnEchecEtMat(cases, color)){ roiTemp = new Roi(roi.getPosX()+1, roi.getPosY()+1, roi.getColor()); if(roiTemp.isOnEchecEtMat(cases, color)){ return true; } } } } } } } } } } } return retour; } }